package com.example.doubledatasource.query;

import lombok.Data;

import java.math.BigDecimal;

/**
 * 产品查询条件
 * 用于分页查询和条件筛选
 * 
 * @author example
 * @since 1.0.0
 */
@Data
public class ProductQuery {

    /**
     * 页码，从1开始
     */
    private Integer page = 1;

    /**
     * 每页大小
     */
    private Integer size = 10;

    /**
     * 排序字段
     */
    private String sortBy = "createTime";

    /**
     * 排序方向：asc/desc
     */
    private String sortDir = "desc";

    /**
     * 产品名称（模糊查询）
     */
    private String name;

    /**
     * 产品描述（模糊查询）
     */
    private String description;

    /**
     * 最小价格
     */
    private BigDecimal minPrice;

    /**
     * 最大价格
     */
    private BigDecimal maxPrice;

    /**
     * 最小库存
     */
    private Integer minStock;

    /**
     * 最大库存
     */
    private Integer maxStock;

    /**
     * 是否有库存（true: 库存>0, false: 库存=0, null: 不限制）
     */
    private Boolean inStock;

    /**
     * 获取偏移量
     */
    public long getOffset() {
        return (long) (page - 1) * size;
    }

    /**
     * 验证并设置默认值
     */
    public void validate() {
        if (page == null || page < 1) {
            page = 1;
        }
        if (size == null || size < 1) {
            size = 10;
        }
        if (size > 100) {
            size = 100; // 限制最大页面大小
        }
        if (sortBy == null || sortBy.trim().isEmpty()) {
            sortBy = "createTime";
        }
        if (sortDir == null || (!sortDir.equalsIgnoreCase("asc") && !sortDir.equalsIgnoreCase("desc"))) {
            sortDir = "desc";
        }
    }
}
